package com.liit.util;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.StringUtils;

import com.liit.entity.RegionFormMap;

/**
 * @author dingweibo
 * @Title: RegionUtils.java
 * @Description: 省市区街道
 * @date 2016年3月27日
 */
public class RegionUtils {

	private static final RegionUtils region = new RegionUtils();

	// 省列表
	private final List<RegionFormMap> provinceList = new ArrayList<RegionFormMap>(40);
	// region Map
	private final Map<Integer, RegionFormMap> regionMap = new HashMap<Integer, RegionFormMap>();
	// 根据parentId分组
	private final Map<Integer, List<RegionFormMap>> regionListMap = new HashMap<Integer, List<RegionFormMap>>();

	private RegionUtils() {
	}

	public static void build(List<RegionFormMap> list) {
		region.provinceList.clear();
		region.regionMap.clear();
		region.regionListMap.clear();
		for (RegionFormMap record : list) {
			if (record.getInt("level") == 1) {
				region.addProvince(record);
			}
			region.addRegion(record);
		}
	}

	/**
	 * 添加省对象
	 * 
	 * @param record
	 */
	public void addProvince(RegionFormMap record) {
		region.provinceList.add(record);
	}

	/**
	 * 添加所有区域对象
	 * 
	 * @param record
	 */
	public void addRegion(RegionFormMap record) {
		regionMap.put(record.getInt("id"), record);
		Integer parentId = record.getInt("parentid");
		if (regionListMap.containsKey(parentId)) {
			regionListMap.get(parentId).add(record);
		} else {
			List<RegionFormMap> list = new ArrayList<RegionFormMap>();
			list.add(record);
			regionListMap.put(parentId, list);
		}
	}

	/**
	 * 获取所有省
	 * 
	 * @return
	 */
	public static List<RegionFormMap> getProvinceList() {
		return region.provinceList;
	}

	/**
	 * 根据主键查询Region对象
	 * 
	 * @param id
	 * @return
	 */
	public static RegionFormMap getRegionById(Integer id) {
		return region.regionMap.get(id);
	}

	/**
	 * 根据parentid查询Region对象
	 * 
	 * @param id
	 * @return
	 */
	public static List<RegionFormMap> getRegionByParentId(Integer parentId) {
		return region.regionListMap.get(parentId);
	}

	/**
	 * 根据主键查询Region名称
	 * 
	 * @param id
	 * @return
	 */
	public static String getRegionNameById(Integer id) {
		if (id == null)
			return null;
		try {
			return getRegionById(id).getStr("name");
		} catch (Exception e) {
			return null;
		}
	}

	/**
	 * 根据主键查询Region名称
	 * 
	 * @param id
	 * @return
	 */
	public static String getRegionNameById(String id) {
		if (StringUtils.isEmpty(id))
			return null;
		try {
			return getRegionById(Integer.valueOf(id)).getStr("name");
		} catch (NumberFormatException e) {
			return id;
		} catch (Exception e) {
			return null;
		}
	}
}
